/*
 * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The OpenAirInterface Software Alliance licenses this file to You under
 * the OAI Public License, Version 1.1  (the "License"); you may not use this
 * file except in compliance with the License. You may obtain a copy of the
 * License at
 *
 *      http://www.openairinterface.org/?page_id=698
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *-------------------------------------------------------------------------------
 * For more information about the OpenAirInterface (OAI) Software Alliance:
 *      contact@openairinterface.org
 */
/**
 * Nudr_DataRepository API OpenAPI file
 * Unified Data Repository Service. © 2020, 3GPP Organizational Partners (ARIB,
 * ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
 *
 * The version of the OpenAPI document: 2.1.2
 *
 *
 * NOTE: This class is auto generated by OpenAPI Generator
 * (https://openapi-generator.tech). https://openapi-generator.tech Do not edit
 * the class manually.
 */
/*
 * PduSessionManagementData.h
 *
 *
 */

#ifndef PduSessionManagementData_H_
#define PduSessionManagementData_H_

#include <nlohmann/json.hpp>
#include <string>
#include <vector>

#include "Ipv6Addr.h"
#include "Ipv6Prefix.h"
#include "PduSessionStatus.h"
#include "PduSessionType.h"
#include "RouteToLocation.h"

namespace oai::udr::model {

/// <summary>
///
/// </summary>
class PduSessionManagementData {
public:
  PduSessionManagementData();
  virtual ~PduSessionManagementData();

  void validate();

  /////////////////////////////////////////////
  /// PduSessionManagementData members

  /// <summary>
  ///
  /// </summary>
  PduSessionStatus getPduSessionStatus() const;
  void setPduSessionStatus(PduSessionStatus const &value);
  bool pduSessionStatusIsSet() const;
  void unsetPduSessionStatus();
  /// <summary>
  ///
  /// </summary>
  std::string getPduSessionStatusTs() const;
  void setPduSessionStatusTs(std::string const &value);
  bool pduSessionStatusTsIsSet() const;
  void unsetPduSessionStatusTs();
  /// <summary>
  ///
  /// </summary>
  std::string getDnai() const;
  void setDnai(std::string const &value);
  bool dnaiIsSet() const;
  void unsetDnai();
  /// <summary>
  ///
  /// </summary>
  std::string getDnaiTs() const;
  void setDnaiTs(std::string const &value);
  bool dnaiTsIsSet() const;
  void unsetDnaiTs();
  /// <summary>
  ///
  /// </summary>
  std::vector<RouteToLocation> &getN6TrafficRoutingInfo();
  void setN6TrafficRoutingInfo(std::vector<RouteToLocation> const &value);
  bool n6TrafficRoutingInfoIsSet() const;
  void unsetN6TrafficRoutingInfo();
  /// <summary>
  ///
  /// </summary>
  std::string getN6TrafficRoutingInfoTs() const;
  void setN6TrafficRoutingInfoTs(std::string const &value);
  bool n6TrafficRoutingInfoTsIsSet() const;
  void unsetN6TrafficRoutingInfoTs();
  /// <summary>
  ///
  /// </summary>
  std::string getIpv4Addr() const;
  void setIpv4Addr(std::string const &value);
  bool ipv4AddrIsSet() const;
  void unsetIpv4Addr();
  /// <summary>
  /// UE IPv6 prefix.
  /// </summary>
  std::vector<Ipv6Prefix> &getIpv6Prefix();
  void setIpv6Prefix(std::vector<Ipv6Prefix> const &value);
  bool ipv6PrefixIsSet() const;
  void unsetIpv6Prefix();
  /// <summary>
  ///
  /// </summary>
  std::vector<Ipv6Addr> &getIpv6Addrs();
  void setIpv6Addrs(std::vector<Ipv6Addr> const &value);
  bool ipv6AddrsIsSet() const;
  void unsetIpv6Addrs();
  /// <summary>
  ///
  /// </summary>
  PduSessionType getPduSessType() const;
  void setPduSessType(PduSessionType const &value);
  bool pduSessTypeIsSet() const;
  void unsetPduSessType();
  /// <summary>
  ///
  /// </summary>
  std::string getIpAddrTs() const;
  void setIpAddrTs(std::string const &value);
  bool ipAddrTsIsSet() const;
  void unsetIpAddrTs();
  /// <summary>
  ///
  /// </summary>
  std::string getDnn() const;
  void setDnn(std::string const &value);
  bool dnnIsSet() const;
  void unsetDnn();
  /// <summary>
  ///
  /// </summary>
  int32_t getPduSessionId() const;
  void setPduSessionId(int32_t const value);
  bool pduSessionIdIsSet() const;
  void unsetPduSessionId();
  /// <summary>
  ///
  /// </summary>
  std::string getSuppFeat() const;
  void setSuppFeat(std::string const &value);
  bool suppFeatIsSet() const;
  void unsetSuppFeat();

  friend void to_json(nlohmann::json &j, const PduSessionManagementData &o);
  friend void from_json(const nlohmann::json &j, PduSessionManagementData &o);

protected:
  PduSessionStatus m_PduSessionStatus;
  bool m_PduSessionStatusIsSet;
  std::string m_PduSessionStatusTs;
  bool m_PduSessionStatusTsIsSet;
  std::string m_Dnai;
  bool m_DnaiIsSet;
  std::string m_DnaiTs;
  bool m_DnaiTsIsSet;
  std::vector<RouteToLocation> m_N6TrafficRoutingInfo;
  bool m_N6TrafficRoutingInfoIsSet;
  std::string m_N6TrafficRoutingInfoTs;
  bool m_N6TrafficRoutingInfoTsIsSet;
  std::string m_Ipv4Addr;
  bool m_Ipv4AddrIsSet;
  std::vector<Ipv6Prefix> m_Ipv6Prefix;
  bool m_Ipv6PrefixIsSet;
  std::vector<Ipv6Addr> m_Ipv6Addrs;
  bool m_Ipv6AddrsIsSet;
  PduSessionType m_PduSessType;
  bool m_PduSessTypeIsSet;
  std::string m_IpAddrTs;
  bool m_IpAddrTsIsSet;
  std::string m_Dnn;
  bool m_DnnIsSet;
  int32_t m_PduSessionId;
  bool m_PduSessionIdIsSet;
  std::string m_SuppFeat;
  bool m_SuppFeatIsSet;
};

} // namespace oai::udr::model

#endif /* PduSessionManagementData_H_ */
